package util;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.Set;

/**
 * Classe que, le um gabarito de um arquivo de texto, substituindo cadeias no
 * formato <...>, pelos parametros passados como argumento.
 * 
 * @author Jonathan Brilhante
 * @author Jose Rafael
 * @author Nata Venancio
 * @author Renato Almeida
 * 
 * @version 1.0
 */

public class LeitorGabarito {
	private static final char ABRE = '<';
	private static final char FECHA = '>';
	private static final String SEP = System.getProperty("file.separator");
	private static final String ENDL = System.getProperty("line.separator");
	private static final String PATH = "db" + SEP + "gabaritos" + SEP;
	private String textoGabarito;

	/**
	 * Constroi um leitor de gabaritos.
	 * 
	 * @param nome
	 *            o nome do arquivo.
	 * @throws FileNotFoundException
	 *             caso o gabarito nao seja encontrado.
	 */
	public LeitorGabarito(String nome) throws FileNotFoundException {
		BufferedReader leitorBuffer = new BufferedReader(new FileReader(PATH
				+ nome));
		StringBuffer res = new StringBuffer();
		try {
			String lida = leitorBuffer.readLine();
			while (lida != null) {
				res.append(lida);
				lida = leitorBuffer.readLine();
				if (lida != null)
					res.append(ENDL);
			}
		} catch (IOException e) {
		} finally {
			textoGabarito = res.toString();
		}
	}

	/**
	 * Retorna o texto do gabarito, trocando as cadeias de parametros (cercados
	 * por <>), substituindo os seus valores pelo valor correspondente no mapa.
	 * Ex.: no mapa, nome_usuario -> ImHere, todos os parametros <nome_usuario>
	 * do gabarito, serao trocados por ImHere.
	 * 
	 * @param parametros
	 *            o mapeamento de parametros -> argumentos.
	 * @return o texto final.
	 */
	public String getTexto(Map<String, String> parametros) {
		String res = textoGabarito;
		Set<String> param = parametros.keySet();
		for (String p : param) {
			res = res.replaceAll(ABRE + p + FECHA, parametros.get(p));
		}
		return res;
	}
}
